/**
 * XMsg                 消息辅助业务类
 * @author              罗伟权
 * @createdate          2013-05-16
 * @version             1.0
 */


#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>


// Toast显示的对齐方式（垂直位置上）
typedef enum _ToastAlignEnum {
    AlignTop,                           // 顶端显示
    AlignCenter,                        // 居中显示
    AlignBottom                         // 底端显示
} ToastAlignEnum;

// Toast显示的时长
typedef enum _ToastDurationEnum {
    DurationShort = 1000,               // 1秒
    DurationNormal = 4000,              // 4秒
    DurationLong = 10000                // 10秒
} ToastDurationEnum;


@interface XMsg : NSObject


/**
 * 显示消息框
 * 显示后，不作回调的处理
 * @param   msg             需要显示的消息，NSString类型，标题将会显示为“温馨提示”
 * @result
 */
+ (void)showMessage:(NSString *)msg;


/**
 * 显示消息框
 * 显示后，不作回调的处理
 * @param   msg             需要显示的消息，NSString类型
 * @param   title           需要显示消息的标题，NSString类型（可以为nil，当为nil时，标题将会显示为“温馨提示”）
 * @result
 */
+ (void)showMessage:(NSString *)msg withTitle:(NSString *)title;


/**
 * 显示消息框
 * 显示后，不作回调的处理
 * @param   msg             需要显示的消息，NSString类型
 * @param   title           需要显示消息的标题，NSString类型（可以为nil，当为nil时，标题将会显示为“温馨提示”）
 * @param   goback          标识点击“确认”后，是否返回上一界面，YES 为返回，NO 为不返回
 * @result
 */
+ (void)showMessage:(NSString *)msg withTitle:(NSString *)title andGoback:(BOOL)goback;


/**
 * 显示消息框
 * @param   msg             需要显示的消息，NSString类型
 * @param   title           需要显示消息的标题，NSString类型（可以为nil，当为nil时，标题将会显示为“温馨提示”）
 * @param   tag             消息框的标识
 * @param   delegate        id<UIAlertViewDelegate> UIAlertView 回调对象，（可以为nil），不回调：
 *                          - (void)willPresentAlertView:(UIAlertView *)alertView;
 *                          - (void)didPresentAlertView:(UIAlertView *)alertView;
 * @result
 */
+ (void)showMessage:(NSString *)msg
          withTitle:(NSString *)title
                tag:(NSInteger)tag
           delegate:(id/*<UIAlertViewDelegate>*/)delegate;


/**
 * 显示消息框
 * 显示后，不作回调的处理
 * @param   msg             需要显示的消息，NSString类型
 * @param   title           需要显示消息的标题，NSString类型（可以为nil，当为nil时，标题将会显示为“温馨提示”）
 * @param   ok              确定按钮的文字
 * @param   cancel          取消按钮的文字
 * @result
 */
+ (void)showMessage:(NSString *)msg
          withTitle:(NSString *)title
                 ok:(NSString *)ok
             cancel:(NSString *)cancel;


/**
 * 显示消息框
 * @param   msg             需要显示的消息，NSString类型
 * @param   title           需要显示消息的标题，NSString类型（可以为nil，当为nil时，标题将会显示为“温馨提示”）
 * @param   tag             消息框的标识
 * @param   ok              确定按钮的文字
 * @param   cancel          取消按钮的文字
 * @param   delegate        id<UIAlertViewDelegate> UIAlertView 回调对象，不回调：
 *                          - (void)willPresentAlertView:(UIAlertView *)alertView;
 *                          - (void)didPresentAlertView:(UIAlertView *)alertView;
 * @result
 */
+ (void)showMessage:(NSString *)msg
          withTitle:(NSString *)title
                tag:(NSInteger)tag
                 ok:(NSString *)ok
             cancel:(NSString *)cancel
           delegate:(id/*<UIAlertViewDelegate>*/)delegate;


/**
 * 显示自动隐藏的消息
 * 显示消息后，渐隐消失（消息显示在下方，并且采用默认时长显示）
 * @param   msg             需要显示的消息，NSString类型
 * @result
 */
+ (void)showToast:(NSString *)msg;


/**
 * 显示自动隐藏的消息（可定义位置及消失时长）
 * 显示消息后，渐隐消失，可定义出现的位置，消失前的时长
 * @param   msg             需要显示的消息，NSString类型
 * @param   align           Toast在垂直位置上的对齐方式，ToastAlign类型（上端对齐：AlignTop、垂直居中：AlignCenter、底端对齐：AlignBottom）
 * @param   duration        Toast在界面显示的时长，ToastDuration类型（长时间显示：DurationLong、正常显示：DurationNormal、短时间显示：DurationShort）
 * @result
 */
+ (void)showToast:(NSString *)msg
      withGravity:(ToastAlignEnum)align
      andDuration:(ToastDurationEnum)duration;


/**
 * 显示自动隐藏的消息（可定义位置及消失时长）
 * 显示消息后，渐隐消失，可定义出现的位置，消失前的时长
 * @param   msg             需要显示的消息，NSString类型
 * @param   align           Toast在垂直位置上的对齐方式，ToastAlign类型（上端对齐：AlignTop、垂直居中：AlignCenter、底端对齐：AlignBottom）
 * @param   left            基于对齐方式的基础上进行的向左偏移
 * @param   top             基于对齐方式的基础上进行的向上偏移
 * @param   duration        Toast在界面显示的时长，ToastDuration类型（长时间显示：DurationLong、正常显示：DurationNormal、短时间显示：DurationShort）
 * @result
 */
+ (void)showToast:(NSString *)msg
      withGravity:(ToastAlignEnum)align
       offsetLeft:(NSInteger)left
        offsetTop:(NSInteger)top
      andDuration:(ToastDurationEnum)duration;


/**
 * 显示进度
 * 在对应的视图当中显示进度视图
 * @result
 */
+ (void)showProgress;


/**
 * 显示进度
 * 在对应的视图当中显示进度视图
 * @param   title           需要显示的提示文字信息
 * @result
 */
+ (void)showProgressWithTitle:(NSString *)title;


/**
 * 隐藏进度
 * 隐藏对应的视图当何总显示的进度视图
 * @result
 */
+ (void)hideProgress;


/**
 * 简单选项模式（只有一行文字的选项框）
 * @param        title，弹出框对应的标题信息
 * @param        items，选项数组，每个元素为一个字符串NSString，作为item的标题显示出来
 * @param        delegate，处理选项选中后的回调对象，对象当中需实现 - (void)selectItem:(NSString*)title index:(NSUInteger)uIndex 方法
 * @result
 */
+ (void)showSelector:(NSString*)title
           withItems:(NSArray*)items
            delegate:(id/*<ItemsSelectorDelegate>*/)delegate;


/**
 * 简单选项模式-词典元素（只有一行文字的选项框）
 * @param        title，弹出框对应的标题信息
 * @param        items，选项数组，每个元素为一个词典数据，根据传入的Key，获取相应的字段，作为item的标题显示出来
 * @param        key，词典元素对应的Key值，根据该Key值获取词典元素当中对应的字段，作为item的标题显示出来
 * @param        delegate，处理选项选中后的回调对象，对象当中需实现 - (void)selectItem:(NSString*)title index:(NSUInteger)uIndex 方法
 * @result
 */
+ (void)showSelector:(NSString*)title
        withDicItems:(NSArray*)items
              andKey:(NSString*)key
            delegate:(id/*<ItemsSelectorDelegate>*/)delegate;


/**
 * 简单选项模式-词典元素（只有一行文字的选项框）
 * @param        title，弹出框对应的标题信息
 * @param        items，选项数组，每个元素为一个字典NSDictionary 含有对象：
 *                      KEY             值类型                 说明
 *                      Title           NSString              选项名称，将作为item的标题显示（不能为空）
 *                      Image           UIImage               列表当中显示的图片（可选）
 *                      Detail          NSString              详情信息（可选）
 * @param        key，词典元素对应的Key值，根据该Key值获取词典元素当中对应的字段，作为item的标题显示出来
 * @param        delegate，处理选项选中后的回调对象，对象当中需实现 - (void)selectItem:(NSString*)title index:(NSUInteger)uIndex 方法
 * @result
 */
+ (void)showDetailSelector:(NSString*)title
                 withItems:(NSArray*)items
                  delegate:(id/*<ItemsSelectorDelegate>*/)delegate;

@end

